<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    // Object.is()方法用来判断两个值是否为同一个值。
    /*
        使用语法如下，其中，value1和value2是比较的两个值。
        Object.is(value1, value2);
    */

    // Object.is()方法返回一个布尔类型的值，若满足以下条件则两个值相等
    /*
        都是undefined
        都是null
        都是true或都是false
        都是字符串，且相同长度、相同字符、相同顺序
        是相同对象（每个对象有同一个引用）
        都是数字，且满足以下任意一个
        都是0
        都是+0
        都是-0
        都是NaN
        都非零，且非NaN，且是同一个值
    */

    // 先定义了两个空对象obj1和obj2，虽然他们都是空对象，但对象是引用数据类型，存储的是对象的地址，所以它们是不相等的。
    const obj1 = {};
    const obj2 = {};
    console.log(Object.is(obj1, obj2));     // false
    //  但如果将同一个对象赋值给两个变量，那么两个变量中存储的都是同一个地址，所以他们是相等的。
    const obj1 = {};
    const value1 = obj1;
    const value2 = obj1;
    console.log(Object.is(value1, value2)); // true

    // Object.is()方法与===不同的地方在于，===运算符将+0和-0视为相等，而将NaN与NaN视为不相等。
    console.log(+0 === -0);           // true
    console.log(NaN === NaN);         // false
    // 同样的两个值，在Object.is()方法中的结果
    console.log(Object.is(+0, -0));   // false
    console.log(Object.is(NaN, NaN)); // true



</script>